#ifndef VECTOR3D_H_
#define VECTOR3D_H_

namespace Geometry
  {
  class Vector3d
    {
    public:
      Vector3d();
      Vector3d(double i_x, double i_y, double i_z);

      double GetLength() const;

      double operator[](size_t i_coord) const;

      Vector3d& operator+=(const Vector3d& i_other);
      Vector3d& operator-=(const Vector3d& i_other);

      Vector3d& operator*=(double i_scalar);

    private:
      double m_x;
      double m_y;
      double m_z;
    };


  Vector3d operator + (Vector3d i_left, const Vector3d& i_right);
  Vector3d operator - (Vector3d i_left, const Vector3d& i_right);

  Vector3d operator*(Vector3d i_vector, double i_scalar);
  double operator * (const Vector3d& i_left, const Vector3d& i_right);
  Vector3d operator^(const Vector3d& i_left, const Vector3d& i_right);

  bool operator == (const Vector3d& i_left, const Vector3d& i_right);

  double MixedProduct(const Vector3d& i_vec_1, const Vector3d& i_vec_2, const Vector3d& i_vec_3);


  }

#endif